home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garbo
/
Garbo.cdr
/
mac
/
source
/
music4c.sit
/
Music4C Folder
/
SFConvert folder
/
SFConvertFile.c
< prev
next >
Wrap
Text File
|
1990-06-26
|
21KB
|
763 lines
#include "SFConvert.h"
#include "SDtype.h"
#include <stdio.h>
#include <string.h>
#include <unix.h>
Boolean OpenSFWrite(void);
Boolean SetSFDir(Str255, long *);
Boolean GetSFDir(Str255 *);
Boolean CloseSF(void);
Boolean updateNewSFResFile(void);
Boolean OpenSFRead(void);
extern void GetMusic4C_Prefs(void);
extern void OSError2(Str255, Str255, OSErr);
extern void OSError(Str255, Str255);
extern void PstringCopy(char *, char *);
extern void PstringCat(char *, char *);
extern void DoOSErrorAlert(Str255, Str255);
SFReply SoundFileReply;
SFReply NewSoundFileReply;
WDPBRec myWDParamBlk;
Point where;
FileParam fPB;
extern long SoundFileDirID;
extern long StartUpDirID;
extern int SFSaveVRef;
extern OSErr theErr;
Boolean OpenSFWrite()
{
SFTypeList types;
extern ioParam myIOParmBlk;
extern ioParam NewParmBlk;
extern Str255 SoundFileName;
extern Str255 NewSoundFileName;
extern int SFOUTPUTtype;
extern Str255 SFDirectoryName;
extern long StartUpDirID;
extern long SoundFileDirID;
extern long NumChannels;
int c;
if ( SFDirectoryName[0] != NIL ) {
if ( !SetSFDir(SFDirectoryName, &SoundFileDirID) ) {
CurDirStore = StartUpDirID;
return(FALSE);
}
}
/* we know number of channels by now, for FLOATS anyway */
if ( NumChannels >= 2L && SFOUTPUTtype == SD1 )
SFOUTPUTtype = SD2;
PstringCopy((char *)NewSoundFileName, (char *)SoundFileName);
PtoCstr((char *)NewSoundFileName);
c = strcspn((char *)NewSoundFileName,".");
switch(SFOUTPUTtype) {
case INT16:
strcpy((char *)NewSoundFileName+c, ".INT16");
break;
case AIFF:
strcpy((char *)NewSoundFileName+c, ".AIF");
break;
case SD1:
strcpy((char *)NewSoundFileName+c, ".SD");
break;
case SD2:
strcpy((char *)NewSoundFileName+c, ".SD2");
break;
case FLOAT:
strcpy((char *)NewSoundFileName+c, ".FLOAT");
break;
}
SetPt(&where, 100, 100);
CtoPstr((char *)NewSoundFileName);
SFPutFile(where, "\pSound File name:", &NewSoundFileName, NIL, &NewSoundFileReply);
if(!NewSoundFileReply.good) {
return(FALSE);
}
GetSFDir(&SFDirectoryName);
/* we now have the directory where the sound file is to be created */
SetSFDir(SFDirectoryName, &SoundFileDirID);
PstringCopy((char *)NewSoundFileName, (char *)NewSoundFileReply.fName);
NewParmBlk.ioNamePtr = (StringPtr)NewSoundFileName;
NewParmBlk.ioVRefNum = NewSoundFileReply.vRefNum;
NewParmBlk.ioVersNum = NewSoundFileReply.version;
if ( (theErr = PBCreate(&NewParmBlk, FALSE)) != noErr ) {
if ( theErr == dupFNErr ) { /* set logical EOF's to zero */
NewParmBlk.ioPermssn = fsWrPerm;
NewParmBlk.ioMisc = (Ptr)NIL;
theErr = PBOpen(&NewParmBlk, FALSE);
if ( theErr == opWrErr ) {
/* already open, do nothing */
}
else if ( theErr != noErr ) {
OSError2("\pError opening sound file: ", NewSoundFileName, theErr);
return(FALSE);
}
NewParmBlk.ioMisc = (Ptr)1;
theErr = PBSetEOF(&NewParmBlk, FALSE);
if ( theErr != noErr ) {
OSError2("\pError setting EOF for sound file: ", NewSoundFileName, theErr);
return(FALSE);
}
theErr = PBClose(&NewParmBlk, FALSE);
if ( theErr != noErr ) {
OSError2("\pError while setting EOF for sound file: ", NewSoundFileName, theErr);
return(FALSE);
}
/* do resource fork */
NewParmBlk.ioMisc = (Ptr)NIL;
theErr = PBOpenRF(&NewParmBlk, FALSE);
if ( theErr != noErr ) {
if ( theErr != opWrErr ) {
OSError2("\pError opening sound file resource fork: ", SoundFileName, theErr);
CurDirStore = StartUpDirID;
return(FALSE);
}
}
theErr = PBSetEOF(&NewParmBlk, FALSE);
if ( theErr != noErr ) {
OSError2("\pError setting EOF for sound file resource fork: ", NewSoundFileName, theErr);
return(FALSE);
}
/* close resource fork */
theErr = PBClose(&NewParmBlk, FALSE);
if ( theErr != noErr ) {
OSError2("\pError while setting EOF for sound file: ", NewSoundFileName, theErr);
return(FALSE);
}
}
else { /* error other than dupFNerr */
OSError2("\pOpenSFWrite Error creating file: ", NewSoundFileName, theErr);
return(FALSE);
}
}
else { /* new files only */
}
fPB.ioCompletion = (ProcPtr)NIL;
fPB.ioNamePtr = NewParmBlk.ioNamePtr;
fPB.ioVRefNum = NewParmBlk.ioVRefNum;
fPB.ioFVersNum = NewParmBlk.ioVersNum;
fPB.ioFDirIndex = NIL;
theErr = PBGetFInfo(&fPB, FALSE);
if ( theErr != noErr ) {
OSError2("\pOpenSFWrite Error getting PBGetFInfo while opening file: ", NewSoundFileName, theErr);
return(FALSE);
}
/* set creator */
fPB.ioFlFndrInfo.fdCreator = 'MU4C';
/* fPB.ioFlFndrInfo.fdCreator = 'SFIN'; i.e. SFInfo */
switch(SFOUTPUTtype) {
case INT16:
fPB.ioFlFndrInfo.fdType = 'IL16';
break;
case AIFF:
fPB.ioFlFndrInfo.fdType = 'AIFF';
break;
case SD1:
fPB.ioFlFndrInfo.fdType = 'SFIL';
fPB.ioFlFndrInfo.fdCreator = 'XFER';
/* check for SD2 file */
/* fPB.ioFlFndrInfo.fdType = 'Sd2f'; */
break;
case SD2:
fPB.ioFlFndrInfo.fdType = 'Sd2f';
fPB.ioFlFndrInfo.fdCreator = 'Sd2a';
break;
case FLOAT:
fPB.ioFlFndrInfo.fdType = 'TEXT';
break;
}
fPB.ioFlFndrInfo.fdFlags = NIL;
theErr = PBSetFInfo(&fPB, FALSE);
if ( theErr != noErr ) {
OSError2("\pOpenSFWrite Error setting PBGetFInfo while opening file: ", NewSoundFileName, theErr);
return(FALSE);
}
PBFlushVol(&fPB, FALSE);
/* now open it */
NewParmBlk.ioPermssn = fsWrPerm;
NewParmBlk.ioMisc = (Ptr)0L;
if ( (theErr = PBOpen(&NewParmBlk, FALSE)) != noErr ) {
OSError2("\pOpenSFWrite Error opening file: ", NewSoundFileName, theErr);
return(FALSE);
}
return(TRUE);
}
Boolean OpenSFRead()
{
register i;
SFTypeList types;
extern ioParam myIOParmBlk;
extern Str255 SoundFileName;
extern long fileSize;
extern int SoundFileType;
extern long NumChannels;
extern double MaxSample;
extern double MinSample;
extern long SampleRate;
extern Boolean SDnoResource;
Str255 myStr255;
long sfResFileRefNum;
Str255 resString;
int wdRefNum;
Handle myHndl;
StringHandle aString;
Str255 myString;
if ( SFDirectoryName[0] != NIL ) {
if ( !SetSFDir(SFDirectoryName, &SoundFileDirID) ) {
CurDirStore = StartUpDirID;
return(FALSE);
}
}
types[0] = 'TEXT';
types[1] = 'SFIL';
types[2] = 'Sd2f';
types[3] = 'AIFF';
SetPt(&where, 100, 100);
SFGetFile(where, NIL, NIL, 4, types, NIL, &SoundFileReply);
if(!SoundFileReply.good) {
return(FALSE);
}
GetSFDir(SFDirectoryName);
SetSFDir(SFDirectoryName, &SoundFileDirID);
PstringCopy((char *)SoundFileName, (char *)SoundFileReply.fName);
myIOParmBlk.ioNamePtr = (StringPtr)SoundFileReply.fName;
myIOParmBlk.ioVRefNum = SoundFileReply.vRefNum;
myIOParmBlk.ioVersNum = SoundFileReply.version;
myIOParmBlk.ioPermssn = fsRdWrPerm;
if ( (theErr = PBOpen(&myIOParmBlk, FALSE) )!= noErr) {
OSError("\pError opening file", NIL);
}
myIOParmBlk.ioCompletion = NIL;
PBGetEOF(&myIOParmBlk, FALSE);
if ( (fileSize = (long)myIOParmBlk.ioMisc) <= 0 ) {
OSError("\pfile is empty!", NIL);
return(FALSE);
}
/* now read the resource part */
/* first check if it is a Sound Designer file */
fPB.ioCompletion = (ProcPtr)NIL;
fPB.ioNamePtr = myIOParmBlk.ioNamePtr;
fPB.ioVRefNum = myIOParmBlk.ioVRefNum;
fPB.ioFVersNum = myIOParmBlk.ioVersNum;
fPB.ioFDirIndex = NIL;
theErr = PBGetFInfo(&fPB, FALSE);
if ( (fPB.ioFlFndrInfo.fdType == 'TEXT') &&
((fPB.ioFlFndrInfo.fdCreator == 'MU4C') || (fPB.ioFlFndrInfo.fdCreator == 'SFIN')))
SoundFileType = FLOAT;
if ( fPB.ioFlFndrInfo.fdType == 'SFIL' )
SoundFileType = SD1;
else if ( fPB.ioFlFndrInfo.fdType == 'Sd2f' )
SoundFileType = SD2;
else if ( fPB.ioFlFndrInfo.fdType == 'AIFF' ) {
SoundFileType = AIFF;
return(TRUE);
}
/* we know the type of file, open the resource fork */
sfResFileRefNum = OpenResFile(SoundFileName);
SDnoResource = FALSE;
if ((theErr = ResError()) != noErr) {
/* no resource fork, not a FLOAT or SD2 file, could be SD1 or AIFF */
if ( SoundFileType != SD1 && SoundFileType != AIFF) {
OSError2("\pError opening resource file: ", SoundFileName, theErr);
return(FALSE);
}
else {
SDnoResource = TRUE;
}
return(TRUE);
}
GetIndString(&resString, SFRESOURCENUM, 1);
PtoCstr((char *)resString);
if ( strcmp("", (char *)resString) == 0 ) {
/* i.e. have a resource fork but not a soundfile resource. Check for a SD2 resource */
myHndl = GetResource('STR ', SAMPLE_RATE_RES );
if ( myHndl && (theErr = ResError()) == noErr) {
aString = (StringHandle)GetString(SAMPLE_RATE_RES);
HLock(aString);
PstringCopy((char *)myString, (char *)*aString);
PtoCstr((char *)myString);
/* "cast" to integer value */
i = strcspn((char *)myString, ".");
if ( i > 0 )
myString[i] = '\0';
CtoPstr((char *)myString);
StringToNum(myString, &SampleRate);
HUnlock(aString);
DisposHandle(aString);
SoundFileType = SD2;
myHndl = GetResource('STR ', SAMPLE_CHANNELS_RES );
if ((theErr = ResError()) == noErr) {
aString = (StringHandle)GetString(SAMPLE_CHANNELS_RES);
HLock(aString);
StringToNum(*aString, &NumChannels);
HUnlock(aString);
}
DisposHandle(aString);
DisposHandle(myHndl);
}
else {
/* not a SF resource and not a SD2 resource, could be an Alchemy AIFF file with resources */
if (SoundFileType != AIFF) {
SDnoResource = TRUE;
return(TRUE);
}
else {
CtoPstr((char *)resString);
OSError2("\pUnknown Sound file type", resString, NIL);
return(FALSE);
}
}
}
/* we may have a SF resource, as well as other resources */
if ( strcmp("FLOAT", (char *)resString) == 0 ) {
SoundFileType = FLOAT;
}
else if ( strcmp("INT16", (char *)resString) == 0 ) {
SoundFileType = INT16;
}
else if ( strcmp("SD", (char *)resString) == 0 ) {
SoundFileType = SD1;
}
else if ( strcmp("SD1", (char *)resString) == 0 ) {
SoundFileType = SD1;
}
else if ( strcmp("SD2", (char *)resString) == 0 ) {
SoundFileType = SD2;
}
else if ( strcmp("AIFF", (char *)resString) == 0 ) {
SoundFileType = AIFF;
}
GetIndString(&resString, SFRESOURCENUM, 2);
if ( resString[0] > 0 ) {
StringToNum(resString, &NumChannels);
if ( NumChannels > 4L) {
OSError("\pmono, stereo or quad soundfiles", NIL);
return(FALSE);
}
if ( NumChannels < 1 ) {
/* OSError2("\pNumber of channels = 0 ?", "mono assumed", NIL);*/
NumChannels = 1;
}
}
GetIndString(&resString, SFRESOURCENUM, 3);
if ( resString[0] > 0 ) {
StringToNum(resString, &SampleRate);
}
GetIndString(&resString, SFRESOURCENUM, 4);
if ( resString[0] > 0 ) {
PtoCstr((char *)resString);
sscanf((char *)resString, "%lf", &MaxSample);
}
GetIndString(&resString, SFRESOURCENUM, 5);
if ( resString[0] > 0 ) {
PtoCstr((char *)resString);
sscanf((char *)resString, "%lf", &MinSample);
}
CloseResFile(sfResFileRefNum);
return(TRUE);
}
Boolean CloseSF()
{
extern ioParam myIOParmBlk;
extern ioParam NewParmBlk;
extern int IFileOpen, OFileOpen;
if ( IFileOpen ) {
if ( (theErr = PBClose(&myIOParmBlk, FALSE)) != noErr ) {
OSError2("\pError closing Sound File: ", &SoundFileName, theErr);
return(FALSE);
}
fPB.ioCompletion = (ProcPtr)NIL;
fPB.ioNamePtr = myIOParmBlk.ioNamePtr;
fPB.ioVRefNum = myIOParmBlk.ioVRefNum;
fPB.ioFVersNum = myIOParmBlk.ioVersNum;
fPB.ioFDirIndex = NIL;
if ( (theErr = PBFlushVol(&fPB, FALSE)) != noErr ) {
OSError2("\pError returned from PBFlushVol for sample file's volume: ", "", theErr);
return(FALSE);
}
}
if ( OFileOpen ) {
if ( (theErr = PBClose(&NewParmBlk, FALSE)) != noErr ) {
OSError2("\pError closing Sound File: ", &SoundFileName, theErr);
return(FALSE);
}
fPB.ioCompletion = (ProcPtr)NIL;
fPB.ioNamePtr = NewParmBlk.ioNamePtr;
fPB.ioVRefNum = NewParmBlk.ioVRefNum;
fPB.ioFVersNum = NewParmBlk.ioVersNum;
fPB.ioFDirIndex = NIL;
if ( (theErr = PBFlushVol(&fPB, FALSE)) != noErr ) {
OSError2("\pError returned from PBFlushVol for sample file's volume: ", "", theErr);
return(FALSE);
}
}
return(TRUE);
}
Boolean SetSFDir(DirName, theDirID)
Str255 DirName;
long *theDirID;
{
extern int SFSaveVRef;
extern int ReportFileRefNum;
Str255 aString;
PstringCopy((char *)aString, DirName);
myWDParamBlk.ioNamePtr = (StringPtr)aString;
myWDParamBlk.ioCompletion = NIL;
myWDParamBlk.ioVRefNum = 0;
myWDParamBlk.ioWDDirID = NIL;
if ( (theErr = PBHSetVol(&myWDParamBlk, FALSE)) != noErr ) {
/* OSError2("\pSetSFDir error: PBHSetVol", myWDParamBlk.ioNamePtr, (long)theErr);
return(FALSE);
*/
}
PBHGetVol(&myWDParamBlk, FALSE);
*theDirID = myWDParamBlk.ioWDDirID;
CurDirStore = *theDirID;
SFSaveVRef = myWDParamBlk.ioVRefNum;
SFSaveDisk = -1 * SFSaveVRef;
return(TRUE);
}
Boolean GetSFDir(DirName)
Str255 *DirName;
{
Str255 myStr;
WDPBRec myWDParamBlk;
DirInfo myCatInfoBlk;
myCatInfoBlk.ioCompletion = NIL;
myCatInfoBlk.ioVRefNum = -SFSaveDisk;
myCatInfoBlk.ioDrDirID = CurDirStore;
myCatInfoBlk.ioFDirIndex = -1;
myCatInfoBlk.ioNamePtr = (StringPtr)myStr;
if ( (theErr = PBGetCatInfo(&myCatInfoBlk, FALSE)) != noErr ) {
OSError2("\pPBGetCatInfo", myCatInfoBlk.ioNamePtr, (long)theErr);
return(FALSE);
}
PstringCopy(DirName, (char *)myStr);
PstringCat(DirName, "\p:");
while (myCatInfoBlk.ioDrDirID != 2 ) {
myCatInfoBlk.ioDrDirID = myCatInfoBlk.ioDrParID;
if ( (theErr = PBGetCatInfo(&myCatInfoBlk, FALSE)) != noErr ) {
OSError2("\pPBGetCatInfo", myCatInfoBlk.ioNamePtr, (long)theErr);
return(FALSE);
}
PstringCat((char *)myStr, "\p:");
PstringCat((char *)myStr, DirName);
PstringCopy(DirName, (char *)myStr);
}
CurDirStore = myCatInfoBlk.ioDrDirID;
return(TRUE);
}
typedef struct {
int nstrings;
Str255 theStrings;
} ResDatum;
Boolean updateNewSFResFile()
{
ResDatum **newSfRes;
StringHandle myStringHandle0, myStringHandle1, myStringHandle2, myStringHandle3;
StringPtr strptr;
Str255 myString;
extern int SoundFileType;
extern int SFOUTPUTtype;
extern long NumChannels;
extern double MaxSample;
extern double MinSample;
extern long SampleRate;
int NsfResFileRefNum;
int i;
/* open the resource fork */
CreateResFile(NewSoundFileName);
if ( ( theErr = ResError()) != noErr ) {
OSError2("\pOpenSFWrite: CreateResFile error: ", NewSoundFileName, theErr);
return(FALSE);
}
NsfResFileRefNum = OpenResFile(NewSoundFileName);
if ( ( theErr = ResError()) != noErr ) {
OSError2("\pupdateNewSFResFile: OpenResFile error: ", NewSoundFileName, theErr);
return(FALSE);
}
newSfRes = (ResDatum **) NewHandle(sizeof(ResDatum));
HLock(newSfRes);
(**newSfRes).nstrings = 5;
strptr = (*newSfRes)->theStrings;
switch(SFOUTPUTtype) {
case INT16:
PstringCopy(strptr, "\pINT16");
strptr += (*strptr) + 1;
break;
case AIFF:
PstringCopy(strptr, "\pAIFF");
strptr += (*strptr) + 1;
break;
case SD1:
PstringCopy(strptr, "\pSD");
strptr += (*strptr) + 1;
break;
case SD2:
PstringCopy(strptr, "\pSD2");
strptr += (*strptr) + 1;
break;
case FLOAT:
PstringCopy(strptr, "\pFLOAT");
strptr += (*strptr) + 1;
break;
default:
PstringCopy(strptr, "\pINT16");
strptr += (*strptr) + 1;
break;
}
if ( NumChannels < 1 )
NumChannels = 1;
NumToString(NumChannels, &myString);
PstringCopy(strptr, (char *)myString);
strptr += (*strptr) + 1;
NumToString(SampleRate, &myString);
PstringCopy(strptr, (char *)myString);
strptr += (*strptr) + 1;
i = sprintf((char *)myString, "%lf", (double)MaxSample);
CtoPstr((char *)myString);
PstringCopy(strptr, (char *)myString);
strptr += (*strptr) + 1;
i = sprintf((char *)myString, "%lf", (double)MinSample);
CtoPstr((char *)myString);
PstringCopy(strptr, (char *)myString);
AddResource(newSfRes, 'STR#', SFRESOURCENUM, "\pSF params");
if ((theErr = ResError()) != noErr) {
OSError2("\pAddResource error in updateNewSFResFile()", NIL, theErr);
HUnlock(newSfRes);
DisposHandle(newSfRes);
return(FALSE);
}
ChangedResource(newSfRes);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pChangedResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock(newSfRes);
DisposHandle(newSfRes);
return(FALSE);
}
WriteResource(newSfRes);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pWriteResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock(newSfRes);
DisposHandle(newSfRes);
return(FALSE);
}
/*add SD2 resources */
if ( SFOUTPUTtype == SD2 ) {
myStringHandle1 = (StringHandle)NewHandle(sizeof(StringHandle));
i = sprintf((char *)myString, "%d", (int)NumChannels);
CtoPstr((char *)myString);
SetString(myStringHandle1, myString);
HLock((Handle)myStringHandle1);
AddResource((Handle)myStringHandle1, 'STR ', SAMPLE_CHANNELS_RES, "\pchannels");
HUnlock((Handle)myStringHandle1);
ChangedResource((Handle)myStringHandle1);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pChangedResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle1);
DisposHandle((Handle)myStringHandle1);
return(FALSE);
}
WriteResource((Handle)myStringHandle1);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pWriteResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle1);
DisposHandle((Handle)myStringHandle1);
return(FALSE);
}
myStringHandle2 = (StringHandle)NewHandle(sizeof(StringHandle));
i = sprintf((char *)myString, "%ld", (long)SampleRate);
CtoPstr((char *)myString);
SetString(myStringHandle2, myString);
HLock((Handle)myStringHandle2);
AddResource((Handle)myStringHandle2, 'STR ', SAMPLE_RATE_RES, "\psample-rate");
HUnlock((Handle)myStringHandle2);
ChangedResource((Handle)myStringHandle2);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pChangedResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle2);
DisposHandle((Handle)myStringHandle2);
return(FALSE);
}
WriteResource((Handle)myStringHandle2);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pWriteResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle2);
DisposHandle((Handle)myStringHandle2);
return(FALSE);
}
myStringHandle3 = (StringHandle)NewHandle(sizeof(StringHandle));
SetString(myStringHandle3, "\p2");
HLock((Handle)myStringHandle3);
AddResource((Handle)myStringHandle3, 'STR ', SAMPLE_SIZE_RES, "\psample-size");
HUnlock((Handle)myStringHandle3);
if ((theErr = ResError()) != noErr) {
OSError2("\pAddResource error in updateNewSFResFile()", NIL, theErr);
HUnlock((Handle)myStringHandle3);
DisposHandle((Handle)myStringHandle3);
return(FALSE);
}
ChangedResource((Handle)myStringHandle3);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pChangedResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle3);
DisposHandle((Handle)myStringHandle3);
return(FALSE);
}
WriteResource((Handle)myStringHandle3);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pWriteResource error in updateNewSFResFile()", NewSoundFileName, theErr);
HUnlock((Handle)myStringHandle3);
DisposHandle((Handle)myStringHandle3);
return(FALSE);
}
HUnlock((Handle)myStringHandle3);
DisposHandle((Handle)myStringHandle1);
DisposHandle((Handle)myStringHandle2);
DisposHandle((Handle)myStringHandle3);
}
CloseResFile(NsfResFileRefNum);
if ( (theErr = ResError()) != noErr ) {
OSError2("\pCloseResFile error in updateNewSFResFile()", NewSoundFileName, theErr);
return(FALSE);
}
if ( (theErr = ResError()) != noErr ) {
OSError2("\pUseResFile error in updateNewSFResFile()", NewSoundFileName, theErr);
return(FALSE);
}
PBFlushVol(&fPB, FALSE);
return(TRUE);
}
void GetMusic4C_Prefs()
{
int refNum;
StringPtr volName;
char buffer[2];
long count;
Str255 FileFormat;
extern Str255 SFDirectoryName;
extern SysEnvRec SysEnvData;
int i;
/* "Music4C_Prefs" is kept in the System Folder */
SFDirectoryName[0] = 0;
theErr = FSOpen("\pMusic4C_Prefs", SysEnvData.sysVRefNum, &refNum);
if (theErr == noErr) {
count = 2L;
theErr = FSRead (refNum, &count, &buffer);
if ( theErr != noErr ) {
OSError("\pError reading Preferences file", NIL);
}
count = sizeof(FileFormat);
theErr = FSRead (refNum, &count, &FileFormat);
if ( theErr != noErr ) {
OSError("\pError reading Preferences file", NIL);
}
count = sizeof(SFDirectoryName);
theErr = FSRead (refNum, &count, &SFDirectoryName);
if ( theErr != noErr ) {
OSError("\pError reading Preferences file", NIL);
}
theErr = FSClose(refNum);
}
}